package com.otr.ai.service;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

// 静态导入ChatMemoryAdvisor中的常量，用于设置聊天记忆的参数

/**
 * 模拟的是客户支持助手，具备： 自然语言交互（ChatClient） 记忆能力（ChatMemory） 知识检索（RAG via VectorStore） 函数调用（Function
 * Calling）
 */
@Service
public class WeatherService {

  private final ChatClient chatClient;

  public WeatherService(
      ChatClient.Builder builder,
      ChatMemory chatMemory,
      @Qualifier("weatherTools") WeatherTools weatherTools) {

    // 管理对话历史，确保多轮对话的连贯
    PromptChatMemoryAdvisor promptChatMemoryAdvisor = new PromptChatMemoryAdvisor(chatMemory);

    // 简单日志记录。
    SimpleLoggerAdvisor simpleLoggerAdvisor = new SimpleLoggerAdvisor();

    // 系统提示词
    String tips =
        """
            你是一名AI客服，你的任务是和蔼地回答用户的问题，处理客户要求的各种业务。
            """;
    this.chatClient =
        builder
            .defaultSystem(tips)
            .defaultAdvisors(promptChatMemoryAdvisor, simpleLoggerAdvisor)
            .defaultTools(weatherTools)
            .build();
  }

  public String chat(String chatId, String message) {
    return this.chatClient.prompt().user(message).call().content();
  }
}
